package Day21.ObjectMethodReference;

/**
 * @version 1.0
 * @BelongsProject:IntelliJ IDEA
 * @BelongsPackage:Day21.ObjectMethodReference
 * @Author:hyhWTX
 * @ClassName:Demo01ObjectMethodReference
 * @CreateTime:2022年-10月-22日 10:20
 * @Description: TODO (一句话描述以下该类的功能)
 */
/***
 *
 * @author hyhWTX
 * @date 2022/10/22 10:21
 * @param：
 * 通过对象名的引用成员方法，使用前提是对象名是已经存在的，成员方法也是已经存在的，就可以使用对象名来引用成员方法。
 */
public class Demo01ObjectMethodReference {
    //定义一个方法，方法参数传递Printable接口
    public  static void printString(Printable p){
        p.print("hello");
    }

    public static void main(String[] args) {
        //调用printString方法，方法参数是Printable是一个函数式接口，可以传递Lambda表达式
        printString((s)->{
            //创建MethodRefObject对象
                MethodRefObject obj = new MethodRefObject();
                //调用成员方法printUpperCaseString,把字符串按照大写输出
            obj.printUpperCase(s);
        });
        //使用方法引用优化Lambda表达式，对象已经存在，方法也存在，可以使用对象名引用成员方法

        //创建MethodRefObject对象
        MethodRefObject obj = new MethodRefObject();
        printString(obj::printUpperCase);
    }
}
